函数    代码打包，使代码逻辑更清晰，面向过程编程的单元
    函数定义：
        PHP5格式：
            function 函数名(函数形参列表)

            function 函数名(参数名1, 参数名2...参数名n)
            {
                函数内部代码
                return 函数返回值;
            }

        PHP7格式：标量类型声明及返回值类型声明
            function 函数名(类型名 参数名1, 类型名 参数名2...): 返回值的类型名
            {
                函数内部代码
                return 函数返回值;
            }

        函数名不能重载(重名)

        所有函数的作用域为全局

        function_exists 判断函数是否定义

    函数调用：
        函数名(函数实参列表);

        函数可以定义函数调用下面

        函数中的函数, 在函数里定义子函数，当函数调用后才能去调用子函数

        函数支持递归调用  自己调用自己

    函数参数：
        形参    函数定义括号里的参数, 作用域只在函数内部
        实参    函数调用括号里的参数

        在函数调用时实参会把值赋给形参, 改变形参不会影响实参
        实参个数必须与形参一致, 参数默认值与可变参可以打破此规则
        PHP7支持参数类型的声明，如果类型声明实参类型必须与之对应

        在函数里不能直接访问函数外部定义的变量, 但可以创建全局变量

        创建全局变量，在函数内部使用global对外部变量声明为全局即可访问
        不推荐使用全局变量，浪费资源

        引用传递参数
            默认在函数内部修改不了实参变量的值，只是复制参数
            在形参变量前加&，代表实参引用赋值给形参

        函数参数默认值
            形参变量后赋值(常量表达式，不能赋函数、变量、函数函数等)
            参数默认值必须从右向左连续设置
            如果对应此形能变量的实参没有传，则形参变量的值为设定的默认值

        函数可变参(不知道调用者会传多少个参数, 想让函数接受任意个参数)
            PHP5.6及以上版本 使用...语法实现可变参
                格式： function 函数名([固定参数], ...$可变参名)
                       {
                            $可变参名为数组，保存所有实参变量的值
                       }
                    对可变参也可以类型限制
                        function 函数名([固定参数], 类型名 ...$可变参名)

                    对可变参进行引用传入
                        function 函数名([固定参数], 类型名 & ...$可变参名)

                    实参可以使用...语法实现传参
                        function 函数名(参数名1, 参数名2)
                        函数名(...[实参名1, 实参名2]);
                        数组名 = [实参值, 实参值2]
                        函数名(...$数组名);

            PHP5.6之前版本  使用空括号语法
                使用函数获取形参
                    func_get_args   获取所有可变参,返回数组
                    func_get_arg    获取可变参指定某个参数
                    func_num_args   获取可变参个数

    函数返回值:
        return 只能返回一个值，值的类型可以自定义
        return 后面可以是表达式、函数调用、常量、变量等
        如果要返回多个值可以返回一个数组
        PHP7限制返回值的类型:
            function 函数名(): 返回值的类型名
        返回引用  必须在定义函数时声明返回引用
            function & 函数名()
            {
                return $val;
            }

    函数的递归调用 函数调用函数本身
        函数内部定义的变量会随着函数的结束被释放掉

    可变函数
        函数名以字符串形式可以赋给变量，通过变量调用此函数
        只能把自定义函数赋给变量，实现回调函数、函数表等功能
        函数名赋给变量，变量的值可以任意改变，赋不同自定义函数，则调用的函数不一样

    匿名函数/闭包函数
        将函数的定义直接赋给变量
        $val = function(){echo "hello!\n"};

        可以继承父域的变量, 固定给匿名函数传参，不需要在调用时再传 (默认参数)
        $prefix = "KYO: ";
        $val = function () use ($prefix) {echo "prefix = $prefix!\n";};

常量    提供代码可读性，方便修改批量使用固定不变的常数
    存储固定不变的常数, 常量定义后不能修改其值, 也不能不取消定义(不能unset)
    定义常量的语句只有define和const两个
    const定义常量必须必须处于脚本顶端作用域，define可以在任意位置定义
    访问常量不需要加$前缀
    常量推荐全大写命名
    必须定义在常量访问位置之前
    常量定义后全脚本都可访问，函数内部可直接访问, 但也定义在函数调用之前
    常量定义在函数内部, 但必须执行此函数才能全局访问
    PHP7可以定义常量数组
    预定义的常量 __LINE__ __FILE__ __DIR__ __FUNCTION__

    defined     检查常量是否定义
        用法: defined("常量名");
    constant    获取某个常量的值
    get_defined_constants   获取所有定义的常量的关联数组

变量作用域
    在函数内部定义的变量，包括形参变量，作用域只在函数内部
    在脚本顶端作用域定义的变量只能在顶端作用域中使用，不能在函数中使用
    全局变量 global(使用完全局变量一定要unset)
        global声明全局变量是在函数内部声明外部变量为全局变量
    静态变量的使用
        静态变量的作用： 在函数内部使用专属的全局变量

多文件工作
    include         包含其它文件内容到脚本, 出错会报警告
    include_once    与include功能一样，会检查文件是否包含过，如果包含则不会再包含
    require         包含其它文件内容到脚本，出错会报错误，停止脚本运行
    require_once    同上

    require比include代价高, include推荐使用绝对路径，避免查找操作系统路径而影响速度

PHP内置函数 - 数学扩展函数
    abs             绝对值
    base_convert    进制转化
    ceil            进一法取值
    floor           舍去法取整
    round           四舍五入法取整
    intdiv          整数相除(PHP7)
    max             找出最大值
    min             找出最小值
    mt_getrandmax   返回mt_rand返回随机最大可能值
    mt_rand         返回随机数
    mt_srand        设置随机数种子发生器
    pow             次方
    sqort           平方根

===============================================================================
作业：
    石佳从2000年1月1号开始过着三天打鱼两天晒网的生日，输入年月日求此日在打鱼还是晒网
        进行与黑色星期五例子对比封装函数

    菜单选择打印图形(用函数实现)
        1. 梯形
        2. 正方形
        3. 直角三角形
        4. 设置边长(5)
        5. 设置梯顶(3)
        6. 退出
        请输入[1 - 6]:

            直角三角形子菜单 (合并函数)
                1. 左上边
                2. 左下边
                3. 右下边
                4. 右上边
                5. 返回上一级
                6. 退出
                请输入[1 - 6]:

    猴子吃桃，每天吃前一天的一半加1个桃子，第5天吃完还剩一个，求没吃之前的个数

--------------------------------------------------------------------------

    对一个大于或等于3的正整数，判断它是不是一个素数
        素数，是指除了1和本身之外，不能被其它数整除

    获取两个数的最大公约数

    一个袋子里3个红球，3个绿球，6个黄球，一次从袋子里取6个球，列出所有组合

    把输入的十进制数转化为八进制输出

    求1000以内的完数(所有因子之和等于本身)

    4 5 6 7总共能组成多少个不能被4整除的4位数，位数不能相同 (考虑一个循环)
            $i * 1000 + $j * 100 + $k * 10 + $l

    实现函数判断某个数是否为回文数(11 111 12321)


vim:ft=php:
